package F

import rx.Observable
import rx.functions.Func1
import java.io.File


val users = arrayListOf(
        User("Tom", arrayListOf("公交卡", "学生卡", "超市卡")),
        User("Alice", arrayListOf("美容卡", "仙女卡", "购物卡")),
        User("Jerry", arrayListOf("健身卡", "会员卡", "银行卡"))
)

fun main(args: Array<String>) {


    /**
     * flatMap 的意义在于 将原Observable发射出来的数据 经过一定规则标称新成Observable，
     * 然后将这些新的Observable发送的数据整合起来发送。
     * 比如一些场景：
     *  只提供了一个地址，但是需要打印改地址下的所有的文件
     */
    Observable.from(users).flatMap(object : Func1<User, Observable<String>> {
        override fun call(t: User): Observable<String> {
            return Observable.from(t.cards)
        }

    })

    //根据目录打印目录下所有的文件名（不包含文件夹
    val path = File("rxjava/src")
    Observable.just(path).flatMap {
        return@flatMap Observable.from(it.listFiles())
    }.filter({
        it.isFile
    }).subscribe({
        println(it.name)
    })

}


class User(var name: String, var cards: List<String>)